using Godot;
using System;

public partial class 动画播放节点脚本 : AnimationPlayer
{
    [Export]
    public Sprite2D sprit2d; // 角色精灵节点

    // 跳跃和重力相关参数
    public float jumpVelocity = -400f; // 跳跃初速度（负值向上）
    public float gravity = 800f;       // 重力加速度
    private float velocityY = 0f;      // 当前垂直速度
    private bool isOnGround = true;    // 是否在地面
    private float groundY = 0f;        // 地面高度

    // 移动速度
    public float moveSpeed = 100f;

    public override void _Ready()
    {
        Stop(); // 停止动画
        GD.Print(IsPlaying());
        groundY = sprit2d.Position.Y; // 初始化地面高度
    }

    public override void _Process(double delta)
    {
        var position = sprit2d.Position;
        bool moving = false;

        // 左移（按住x键）
        if (Input.IsActionPressed("x"))
        {
            sprit2d.FlipH = false; // 朝右
            sprit2d.Position = new Vector2(position.X - moveSpeed * (float)delta, position.Y);
            moving = true;
        }

        // 右移（按住c键）
        if (Input.IsActionPressed("c"))
        {
            sprit2d.FlipH = true; // 朝左
            sprit2d.Position = new Vector2(position.X + moveSpeed * (float)delta, position.Y);
            moving = true;
        }

        // 跳跃（按下空格键且在地面）
        if (Input.IsActionJustPressed("空格") && isOnGround)
        {
            velocityY = jumpVelocity;
            isOnGround = false;
            // 可播放跳跃动画 Play("Jump");
        }

        // 重力与下落
        if (!isOnGround)
        {
            velocityY += gravity * (float)delta; // 重力影响速度
            
            sprit2d.Position = new Vector2(sprit2d.Position.X, sprit2d.Position.Y + velocityY * (float)delta);
            GD.Print($"这是 velocityY:{velocityY}, Δ：{delta},gravity :{gravity}, positionY :{sprit2d.Position.Y}");
            // 到达地面
            if (sprit2d.Position.Y >= groundY)
            {
                sprit2d.Position = new Vector2(sprit2d.Position.X, groundY);
                velocityY = 0f;
                isOnGround = true;
                // 可播放落地动画 Play("Land");
            }
            moving = true;
        }

        // 动画控制
        if (moving)
        {
            if (!IsPlaying())
                Play("Move"); // 移动时播放移动动画
        }
        else
        {
            if (IsPlaying())
                Stop(); // 停止动画
            // 如果有Idle动画可以用 Play("Idle");
        }
    }
}
